class A:
    def __init__(self,name,age,address):
        self.name = name
        self.age = age
        self.__address = address        # 前面有两个__的，表示私有属性

    def get_address(self):      # 封装类方法，间接访问私有属性
        return self.__address

    def __info(self):       # 前面有两个__的，表示私有方法
        return f"大家好，我叫：{self.name}，今年：{self.age}岁，来自：{self.__address}"

    def info(self):
        return self.__info()

if __name__ == '__main__':
    # 通过A类创建a1对象
    a1 = A("王振",99,'安徽芜湖')

    # 访问普通实例属性
    print(a1.name)
    print(a1.age)

    # 访问私有属性
    # print(a1.__address)     # 找不到。原因：私有属性没办法直接访问，需要间接访问才可以

    # 调用方法，访问私有属性
    # print(a1.get_address())

    # 调用私有方法
    # print(a1.__info())  # 找不到。原因：私有方法没办法直接访问，需要间接访问才可以

    # 调用方法，间接调用私有方法
    print(a1.info())

"""
总结：
属性前面加__，表示私有属性
方法前面加__，表示私有方法

但凡是私有的，没办法直接访问，需要间接引用才可以（比如封装一个普通方法，去调用它）
"""